<?php
require_once (PASTA_SMARTY . 'ConfigSmarty.class.php');
require_once (PASTA_ADBDO_ALL . 'adodb-pager.inc.php');
require_once (PASTA_CONEXAO . 'Conexao.class.php');
require_once (CAMINHO_SERVIDOR . 'JSON.php');
require_once (PASTA_SMARTY . "Inicia.class.php");
require_once(PASTA_BANCO_DAOGENERICO . "DaoGenerico.class.php");

class executaFuncoes {

    function __construct() {
        
    }

    public function getObjSmarty() {
        if ($this->objSmarty == null)
            $this->objSmarty = ConfigSmarty::getConfigSmarty();
        return $this->objSmarty;
    }

    public function getConexao() {
        if ($this->objCon == null)
            $this->objCon = Conexao::getConexao();
        return $this->objCon;
    }

    public function getConexaoAux() {
        $conexao = new Conexao();
        $con = $conexao->getConexao();
        return $con;
    }

    public function getObjUsuario() {
        if ($this->user == null)
            $this->user = new Usuarios();
        return $this->user;
    }

    public function getObjCripty() {
        if ($this->objCripty == null)
            $this->objCripty = new Cryptografa();
        return $this->objCripty;
    }

    protected function getObjJson() {
        if ($this->objJason == null)
            $this->objJason = new Json();
        return $this->objJason;
    }

    protected function daoGenerico() {
        if ($this->dao == null)
            $this->dao = new DaoGenerico();
        return $this->dao;
    }

    private function executaGetAll($sql) {
        $result = self::getConexao()->getAll($sql);
        self::getConexao()->Close();
        return $result;
    }

    private function executaGetRowEnd($sql) {
        $result = end(self::getConexao()->getRow($sql));
        self::getConexao()->Close();
        return $result;
    }

    private function executaGetRow($sql, $close = false) {
        $result = self::getConexao()->getRow($sql);
        if ($close == false) {
            self::getConexao()->Close();
        }
        return $result;
    }

    private function executaQuery($sql) {
        $result = self::getConexaoAux()->Execute($sql);
        self::getConexaoAux()->Close();
        return $result;
    }

    public function escreveNoConteudo($html) {
        $objInicia = new Inicia();
        $conteudo = PASTA_CONTEUDO_MODEL . "estrutura_conteudo_tpl.tpl";
        $objInicia->imprimeTela(CABECALHO, $conteudo, RODAPE, INDEX, null, MODULO, $html);
    }

    public function encaminha($url, $envia_post = false, $cod = 307) {
        if ($envia_post) {
            header("Location: " . $url, $envia_post, $cod);
        } else {
            Funcoes::redireciona($url);
            //header("Location: " . $url);
        }
    }

    public function enviaEmail($nome_destinatario, $email_destinatario, $nome_remetente, $email_remetente, $assunto, $mensagem, $is_html = false) {
        $dadosEmail = Funcoes::montaParametrosEmail($nome_destinatario, $email_destinatario, $nome_remetente, $email_remetente, $assunto, $mensagem, $is_html);
        if (is_array($email_destinatario)) {
            $rs = Funcoes::enviaEmailArrayDest($dadosEmail);
        } else {
            $rs = Funcoes::enviaEmail($dadosEmail);
        }
        return $rs;
    }

    public function salvaDadosPerfil($post = null, $get = null) {
        $post["idReg"] = self::getObjUsuario()->getIdUsuario();
        unset($post["email_usuario"]);
        $result = self::daoGenerico()->update($post);
        self::encaminha(PASTA_PORTAL_URL . "perfil/" . "msg/" . $result . "/#formPerfilUsuario");
    }

    public function getCorpoEmailGerarNovaSenha($nome, $senha) {
        self::getObjSmarty()->assign("NOME", $nome);
        self::getObjSmarty()->assign("SENHA", $senha);
        $html = self::getObjSmarty()->fetch(PASTA_CONTEUDO_MODEL . "corpoEmailGerarNovaSenha.tpl");
        return $html;
    }

    public function getCorpoEmailAtivacaoCadastro($nome, $link) {
        self::getObjSmarty()->assign("NOME", $nome);
        self::getObjSmarty()->assign("LINK", $link);
        $html = self::getObjSmarty()->fetch(PASTA_CONTEUDO_MODEL . "corpoEmailAtivacaoCadastro.tpl");
        return $html;
    }

    public function getCorpoEmailEsqueceuSenha($nome, $link) {
        self::getObjSmarty()->assign("NOME", $nome);
        self::getObjSmarty()->assign("LINK", $link);
        $html = self::getObjSmarty()->fetch(PASTA_CONTEUDO_MODEL . "corpoEmailEsqueceuSenha.tpl");
        return $html;
    }

    public function getCorpoAvisoAtivacaoCadastro($rs) {
        self::getObjSmarty()->assign("RESPOSTA", $rs);
        $html = self::getObjSmarty()->fetch(PASTA_CONTEUDO_MODEL . "corpoAtivacaoCadastro.tpl");
        return $html;
    }

    public function getCorpoEsqueceuSenha() {
        $html = self::getObjSmarty()->fetch(PASTA_CONTEUDO_MODEL . "corpoEsqueceuSenha.tpl");
        return $html;
    }

    public function validaEmailNaBase($email) {
        $sql = "SELECT email_usuario FROM tb_usuario WHERE email_usuario='" . $email . "'";
        $result = self::executaGetRowEnd($sql);
        if (empty($result)) {
            return true;
        } else {
            return false;
        }
    }

    public function montaLinkAtivador($data, $id) {

        $data = Funcoes::limpaDataCadastro($data);
        $link = PASTA_CLASSES_URL . "ativaCadastro.php?" . self::getObjCripty()->crypt("dt=" . $data . "&id=" . $id);
        return $link;
    }

    public function montaLinkEsqueceuSenha($data, $id) {
        $data = Funcoes::limpaDataCadastro($data);
        $link = PASTA_CLASSES_URL . "esqueceuSenha.php?" . self::getObjCripty()->crypt("dt=" . $data . "&id=" . $id . "&esq=true");
        return $link;
    }

    public function enviaLinkEsqueceuSenha($email) {
        $sql = "SELECT data_cadastro,id_usuario,nome_usuario FROM tb_usuario WHERE email_usuario='" . $email . "'";
        $data = self::getConexaoAux()->GetRow($sql);
        $link = self::montaLinkEsqueceuSenha($data["data_cadastro"], $data["id_usuario"]);
        $html = self::getCorpoEmailEsqueceuSenha($data["nome_usuario"], $link);
        $rs = self::enviaEmail($data["nome_usuario"], $email, NOME_PUBLICO, SMTP_SERV_EMAIL, "Solicitação de nova senha no portal" . NOME_PUBLICO, $html, true);
        return $rs;
    }

    public function enviaLinkAtivador($id) {
        $sql = "SELECT data_cadastro,email_usuario,nome_usuario FROM tb_usuario WHERE id_usuario=" . $id;
        $data = self::getConexaoAux()->GetRow($sql);
        $link = self::montaLinkAtivador($data["data_cadastro"], $id);
        $html = self::getCorpoEmailAtivacaoCadastro($data["nome_usuario"], $link);
        $rs = self::enviaEmail($data["nome_usuario"], $data["email_usuario"], NOME_PUBLICO, SMTP_SERV_EMAIL, "Ativação do cadastro no portal" . NOME_PUBLICO, $html, true);
        return $rs;
    }

    public function alteraSenhaPerfil($post = null, $get = null) {
        $id_usuario = self::getObjUsuario()->getIdUsuario();
        $sql = "SELECT email_usuario,password_usuario FROM tb_usuario WHERE id_usuario=" . $id_usuario;
        $result = self::executaGetRow($sql);
        $nova_senha = md5($post["nova_senha"]);
        $senha_atual = md5($post["senha_atual"]);
        $senha_atual_base = $result["password_usuario"];
        if ($senha_atual == $senha_atual_base) {
            $sql = "UPDATE tb_usuario SET password_usuario='" . $nova_senha . "' WHERE id_usuario=" . $id_usuario;
            $rs = self::executaQuery($sql);
            if ($rs) {
                $rs = 2;
            }
        } else {
            $rs = 3;
        }
        self::encaminha(PASTA_PORTAL_URL . "perfil/" . "msg/" . $rs . "/#formPerfilUsuarioAltSenha");
    }

    public function gerarSenhaUsuario($post = null, $get = null) {
        $id_usuario = self::getObjUsuario()->getIdUsuario();
        $nova_senha = Funcoes::gerarSenha(10, false);
        $sql = "UPDATE tb_usuario SET password_usuario='" . md5($nova_senha) . "' WHERE id_usuario=" . $id_usuario;
        $rs = self::executaQuery($sql);
        if ($rs) {
            $sql = "SELECT nome_usuario,email_usuario,email_opcional FROM tb_usuario WHERE id_usuario=" . $id_usuario;
            $result = self::executaGetRow($sql);
            $email_destinatario[0] = $result["email_usuario"];
            $email_destinatario[1] = $result["email_opcional"];
            $corpo_email = self::getCorpoEmailGerarNovaSenha($result["nome_usuario"], $nova_senha);
            $envio = self::enviaEmail($result["nome_usuario"], $email_destinatario, NOME_PUBLICO, SMTP_SERV_EMAIL, "Nova senha gerada pelo portal " . NOME_PUBLICO, $corpo_email, true);
        }

        if ($rs && $envio) {
            $rs = 5;
        } else {
            $rs = 4;
        }
        self::encaminha(PASTA_PORTAL_URL . "perfil/" . "msg/" . $rs . "/#formPerfilUsuarioAltSenha");
    }

    public function cadastraUsuario($post = null, $get = null) {
        Funcoes::parsePostSession($post, "post_cad_user");
        if (Funcoes::validaCaptcha($post["palavra"])) {
            if (self::validaEmailNaBase($post["email_usuario"])) {
                $post["password_usuario"] = md5($post["password_usuario"]);
                $id = self::daoGenerico()->insert($post);
                if (!empty($id)) {
                    if (self::enviaLinkAtivador($id)) {
                        self::encaminha(PASTA_PORTAL_URL . "login/" . "msg/4/");
                    } else {
                        self::encaminha(PASTA_PORTAL_URL . "login/" . "msg/3/");
                    }
                } else {
                    self::encaminha(PASTA_PORTAL_URL . "login/" . "msg/2/");
                }
            } else {
                self::encaminha(PASTA_PORTAL_URL . "login/" . "msg/1/");
            }
        } else {
            self::encaminha(PASTA_PORTAL_URL . "login/" . "msg/0/");
        }
    }

    public function respostaAtivaCadastro($post = null, $get = null) {
        $corpo = self::getCorpoAvisoAtivacaoCadastro($get["resp"]);
        self::escreveNoConteudo($corpo);
    }

    public function esqueceuSenha($post = null, $get = null) {
        if (self::enviaLinkEsqueceuSenha($post["email_esq"])) {
            self::encaminha(PASTA_PORTAL_URL . "login/" . "msg/7/#formEsqSenha");
        } else {
            self::encaminha(PASTA_PORTAL_URL . "login/" . "msg/6/#formEsqSenha");
        }
    }

    public function respostaEsqueceuSenha($post = null, $get = null) {
        $corpo = self::getCorpoEsqueceuSenha();
        self::escreveNoConteudo($corpo);
    }

    public function criaNovaSenha($post = null, $get = null) {
        $id_usuario = self::getObjUsuario()->getIdUsuario();
        $sql = "UPDATE tb_usuario SET password_usuario='" . md5($post["nova_senha"]) . "' WHERE id_usuario=" . $id_usuario;
        $rs = self::executaQuery($sql);
        if ($rs) {
            self::encaminha(PASTA_PORTAL_URL . "perfil/msg/7/");
        } else {
            self::encaminha(PASTA_PORTAL_URL . "perfil/msg/6/");
        }
    }

}

?>
